/*
 * @PageName:
 * @Description:
 * @FilePath: /glm-mes-pc/vite.config.js
 */
import { defineConfig, loadEnv } from 'vite'
import path, { resolve } from 'path'
import createVitePlugins from './vite/plugins'
import ReactivityTransform from '@vue-macros/reactivity-transform/vite'

// https://vitejs.dev/config/
export default defineConfig(({ mode, command }) => {
	const env = loadEnv(mode, process.cwd())
	const { VITE_APP_ENV } = env
	return {
		// 部署生产环境和开发环境下的URL。
		// 默认情况下，vite 会假设你的应用是被部署在一个域名的根路径上
		// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上，你就需要用这个选项指定这个子路径。例如，如果你的应用被部署在 https://www.ruoyi.vip/admin/，则设置 baseUrl 为 /admin/。
		base: VITE_APP_ENV === 'production' ? '/' : '/',
		// TODO：尝试生产环境去掉log打印
		build: {
			minify: 'terser',
			terserOptions: {
				compress: {
					drop_console: command === 'build' && VITE_APP_ENV === 'production',
					drop_debugger: command === 'build' && VITE_APP_ENV === 'production'
				}
			}
		},
		plugins: [createVitePlugins(env, command === 'build'),ReactivityTransform()],
		resolve: {
			alias: {
				// 设置路径
				'~': path.resolve(__dirname, './'),
				// 设置别名
				'@': path.resolve(__dirname, './src')
			},
			extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
		},
		// vite 相关配置
		server: {
			port: VITE_APP_ENV === 'production' ? 9000 : 8080,
			host: true,
			open: true,
			hmr: true, // 确保 HMR 启用
			proxy: {
				[env.VITE_APP_BASE_API]: {
					target: env.VITE_SERVE,
					changeOrigin: true,
					rewrite: (p) => p.replace(new RegExp(`${env.VITE_APP_BASE_API}`), '')
				},
				[env.VITE_BPM_API_BASE]: {
					target: env.VITE_BPM_SERVE,
					changeOrigin: true,
					rewrite: (p) => p.replace(new RegExp(`${env.VITE_BPM_API_BASE}`), '')
				},
				[env.VITE_BPM_DOWNLOAD_API_BASE]: {
					target: env.VITE_BPM_DOWNLOAD,
					changeOrigin: true,
					rewrite: (p) => p.replace(new RegExp(`${env.VITE_BPM_DOWNLOAD_API_BASE}`), '')
				}
			},
			watch: {
				usePolling: true, // 启用轮询机制
				interval: 1000,  // 每秒检查一次
			}
		},
		//fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file
		css: {
			postcss: {
				plugins: [
					{
						postcssPlugin: 'internal:charset-removal',
						AtRule: {
							charset: (atRule) => {
								if (atRule.name === 'charset') {
									atRule.remove()
								}
							}
						}
					}
				]
			}
		}
	}
})
